package inventario.interfac;

import inventario.code.*;
import inventario.controller.Controller;
import inventario.controller.Opcoes;
import inventario.facade.*;

import java.util.Scanner;

public class InterfaceTexto {

	private static boolean isAdmin = false;
	private static Scanner input;
	private static Usuario usuariologado;
	private static Administrador admin;

	private static CadastraEditaMaquina trataMaquina = new CadastraEditaMaquina();
	private static CriaRemoveAlocacao trataAlocacao;

	public static void main(String[] args) throws Exception {
		header();
		criaAdministrador();
	}

	public static void header() {
		System.out.println("\n    .: Bem-vindo ao Inventario do LSD :."
				+ "\n       ______________________________");
	}

	public static void limpaScan() {
		input = new Scanner(System.in);
	}

	public static String capturaString() {
		limpaScan();
		return input.next().toLowerCase().trim();
	}

	public static int capturaInt() {
		limpaScan();
		return input.nextInt();
	}

	public static void criaAdministrador() throws Exception {
		String nome = "admin";
		String email = "admin@lsd.com";
		TipoDeUsuario tipo = TipoDeUsuario.ADMINISTRADOR;
		String login = "admin";

		System.out.print("\n          Administrador, digite sua nova senha: ");
		String senha = capturaString();

		admin = new Administrador(nome, email, tipo, login, senha);
		menuAdmin();

		// cria-se o administrador, modifica-se a senha e salva tudo no arquivo
	}

	public static void login() throws Exception {
		String login = "";
		String senha = "";

		while (login.equals("") || login.equals(null)) {
			System.out.print("\n          Login: ");
			login = capturaString();
		}

		while (senha.equals("") || senha.equals(null)) {
			System.out.print("            Senha: ");
			senha = capturaString();
		}

		verificaLogin(login, senha);
	}

	/*
	 * Verifica Se o login e a senha existem no sistema e direciona o usuario
	 * para o menu respectivo: administrador ou usuario comum
	 */
	public static boolean verificaLogin(String login, String senha)
			throws Exception {
		if (login.equals(admin.getLogin()) && senha.equals(admin.getSenha())) {
			isAdmin = true;
			menuAdmin();
			return true;
		}
		for (Usuario user : CadastraEditaPessoa.getPessoasCadastradas()) {
			if (user.getLogin().equals(login) && user.getSenha().equals(senha)) {
				usuariologado = user;
				menuUser();
			}
		}

		System.out.print("Login Invalido, tente novamente.");
		login();
		return false;

	}

	/*
	 * Verifica O tipo de Usuario que esta logado e exibe o menu respectivo
	 */
	public static void verificaTipoDeUsuario() throws Exception {
		if (isAdmin == true) {
			menuAdmin();
		} else {
			menuUser();
		}
	}

	/*
	 * Exibe o menu do Usuario comum
	 */
	public static void menuUser() throws Exception {
		System.out.print("\n   .: Deseja : "
				+ "\n       1 - Editar informacoes sobre Mim"
				+ "\n       2 - Editar informacoes sobre Minha Maquina"
				+ "\n       3 - Logout" + "\n       4 - Sair do Programa"
				+ "\n       Sua Escolha: ");

		String opcaoI = capturaString();
		int opcao = Integer.parseInt(opcaoI);
		chamadaUser(opcao);
	}

	public static void chamadaUser(int opcao) throws Exception {
		switch (opcao) {
		case 1:
			CadastraEditaPessoa.usuarioEditaPessoa(usuariologado);
			menuUser();
			break;
		case 2:
			// CadastraEditaMaquina.usuarioEditaAtributosDeMaquina(usuariologado);
			menuUser();
			break;
		case 3:
			usuariologado = null;
			login();
			break;
		case 4:
			System.exit(0);
			break;
		}
	}

	/*
	 * Exibe o menu do administrador
	 */
	public static void menuAdmin() throws Exception {
		System.out.print("\n   .: Deseja : " + "\n       1 - Criar Sala"
				+ "\n       2 - Editar Informacoes sobre uma Sala" +

				"\n\n       3 - Cadastrar Equipamento"
				+ "\n       4 - Editar Informacoes sobre um Equipamento" +

				"\n\n       5 - Cadastrar Pessoa"
				+ "\n       6 - Editar Informacoes sobre uma pessoa" +

				"\n\n       7 - Criar Alocacao "
				+ "\n       8 - Remover Alocacao" +

				"\n\n       9 - Remover Equipamento"
				+ "\n       10 - Mudar Pessoa de Sala"
				+ "\n\n       11 - logout" + "\n       12 - Sair do Programa"
				+ "\n\n          - Sua Escolha:  ");

		String opcaoI = capturaString();
		int opcao = Integer.parseInt(opcaoI);
		chamadas(opcao);
	}

	public static void chamadas(int opcao) throws Exception {
		switch (opcao) {
		case 1:
			doCadastroDeSalas();
			Controller.cadastrandoSala(Opcoes.CADASTRASALA);			
			menuAdmin();
			break;
		case 2:
			//CadastraEditaSala.editaSala();
			menuAdmin();
			break;
		case 3:
			CadastraEditaMaquina.cadastrMaquina("");
			menuAdmin();
			break;
		case 4:
			CadastraEditaMaquina.editaAtributosDeMaquina();
			menuAdmin();
			break;
		case 5:
			CadastraEditaPessoa.adminCadastraPessoa();
			menuAdmin();
			break;
		case 6:
			CadastraEditaPessoa.adminEditaPessoa();
			menuAdmin();
			break;
		case 7:
			trataAlocacao = new CriaRemoveAlocacao(
					CadastraEditaPessoa.getPessoasCadastradas(),
					trataMaquina.getMaquinasCadastradas(),
					CadastraEditaSala.getSalasCadastradas());

			trataAlocacao.criaAlocacao();
			menuAdmin();
			break;
		case 8:
			if (trataAlocacao.equals(null)) {
				trataAlocacao = new CriaRemoveAlocacao(
						CadastraEditaPessoa.getPessoasCadastradas(),
						trataMaquina.getMaquinasCadastradas(),
						CadastraEditaSala.getSalasCadastradas());
			}
			trataAlocacao.removeAlocacao();
			menuAdmin();
			break;
		case 9:
			trataMaquina.removeMaquina();
			menuAdmin();
			break;
		case 10:
			trataAlocacao.moverUsuario();
			menuAdmin();
		case 11:
			// salvar as informacoes do usuario anterior e fazer uma nova
			// abertura
			System.out.print("\n       Ate mais.   o/");
			isAdmin = false;
			login();
			break;
		case 12:
			exit();
			break;
		default:
			exit();
			break;

		}
	}

	public static void exit() throws Exception {
		// logon = false;
		System.out.println("\n LSD - Laboratorio de Sistemas Distribuidos"
				+ "\n   Universidade Federal de Campina Grande"
				+ "\n         Campina Grande - Paraiba");
		System.exit(0);
	}
	
	public static String nomeDaSala;
	public static int capDaSala;
	
	private static void doCadastroDeSalas() {
		
		System.out.print("    Nome da sala a ser cadastrado: ");
		nomeDaSala = capturaString();
		System.out.print("\n    Capacidade da nova sala: ");
		capDaSala = capturaInt();
		
	}
	
	public static String getNomeDaSala() {
		return nomeDaSala;
	}
	
	public static int getCapDaSala() {
		return capDaSala;
	}
	
	
}